package part01_七大原则.p03_依赖倒转原则;

/**
 * @ClassName: DependecyInversion_02
 * @Author: AllenSun
 * @Date: 2019/12/2 23:20
 */
public class DependecyInversion_02 {
    public static void main(String[] args) {
        User user = new User();
        user.recive(new ImplEmail());
        user.recive(new ImplWeixin());
        user.recive(new ImplQQ());
    }
}


//1-一个接受者的接口，至于用什么接收的，现在不管，交给实现类去管，调用的时候统一调用这个接口
interface IReciver{
    public String getInfo();
}

//2-一个电子邮件实现类，接收信息
class ImplEmail implements IReciver{

    @Override
    public String getInfo() {
        return "电子邮件信息：hello, world";
    }
}

//3-一个微信实现类，接收消息
class ImplWeixin implements IReciver{

    @Override
    public String getInfo() {
        return "微信信息：hello, weixin";
    }
}

//想添加什么新的接收类，直接添加就行了，不需要对其他代码改动
class ImplQQ implements IReciver{

    @Override
    public String getInfo() {
        return "QQ信息：hello, weixin";
    }
}

//4-用户，可以调用用来接收消息，这里不依赖实现类，只依赖抽象类或者接口
//不管是哪个实现类，都是在接口的管理下
class User{
    public void recive(IReciver reciver){
        System.out.println(reciver.getInfo());
    }
}